package com.hsxc.cdz.trans.payment.gzhpay;

import java.io.UnsupportedEncodingException;
import java.util.SortedMap;
import java.util.TreeMap;

import com.hsxc.cdz.base.bean.Bill;
import com.hsxc.cdz.mgmt.GlobalManager;

import net.sf.json.JSONObject;

/**
 * @author 作者: 陈钊
 * @version 创建时间：2016年7月1日 上午11:55:36 类说明 ：
 */
public class PrePay {
	/**
	 * 获取预下单的返回值
	 * 
	 * @param bill
	 * @param openId
	 * @param ip
	 * @param type
	 *            支付类型，1--微信公众号4 app支付
	 * @return
	 * @throws UnsupportedEncodingException 
	 */
	public static String prePayBill(Bill bill, String openId, String ip, int type) {
		// 生成获取预支付签名
		SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
		String noncestr = WXUtil.getNonceStr();
		if (type == 1) {
			parameters.put("appid", ConstantUtil.APP_ID_GZH);
			parameters.put("body", "泰坦豪特-充电缴费");
			parameters.put("mch_id", ConstantUtil.MCH_ID);
			parameters.put("nonce_str", noncestr);
			parameters.put("notify_url", ConstantUtil.NOTIFYURL);
			parameters.put("out_trade_no", bill.getBillNO());
			parameters.put("total_fee",Integer.parseInt((int)bill.getFeeSum()*100+""));
			//parameters.put("total_fee", 1);
			parameters.put("spbill_create_ip", ip);
			parameters.put("trade_type", "JSAPI");
			parameters.put("openid", openId);
		} else if (type == 4) {
			parameters.put("appid", ConstantUtil.APP_ID_APP);
			parameters.put("mch_id", ConstantUtil.MCH_ID_APP);
			parameters.put("nonce_str", noncestr);
			parameters.put("body", "TTHT-CHARGE-FEE");
			parameters.put("out_trade_no", bill.getBillNO());
			// parameters.put("total_fee",
			// Integer.parseInt((int)bill.getFeeSum()*100+"")+"");
			parameters.put("total_fee", 1);
			parameters.put("spbill_create_ip", ip);
			parameters.put("notify_url", ConstantUtil.NOTIFYURL_APP);
			parameters.put("trade_type", "APP");
		    //parameters.put("openid", openId);//openId唯一确定一个微信用户
		}
		// 根据类型不同添加不同的APP_KEY
		String sign = WXUtil.createSign("UTF-8", parameters, type);
		parameters.put("sign", sign);
		String reqStr = WXUtil.getRequestXml(parameters);
		// 获取预下单id
		String result = WXUtil.sendPost(ConstantUtil.UNIFORMORDER, reqStr);
		return result;
	}

	/**
	 * 处理预下单结果
	 * 
	 * @param tid
	 * @param openId
	 * @param
	 * @param type
	 * @return
	 */
	public static JSONObject order(String tid, String openId, String ip, int type) {


		Bill bill = GlobalManager.billManager.getBillByBillNO(tid);
		System.out.println("----------下单时--------tid-----" + tid);
		JSONObject jsonObject = new JSONObject();
		if (bill != null) {
			String resultStr = PrePay.prePayBill(bill, openId, ip, type);
			System.out.println("resultstr" + resultStr);
			try {
				jsonObject = WXUtil.getH5PayStr(resultStr, type);
				if(jsonObject.has("errorcode")){
					jsonObject.put("code", 1);
					jsonObject.put("message", "其他问题");
					return jsonObject;
				}
				jsonObject.put("code", 0);
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			jsonObject.put("code", 2);
			jsonObject.put("message", "不存在该账单");
			System.out.println("內存中不存在该账单");
		}
		return jsonObject;
	}
}